package com.tkmybatis.hfy.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.springframework.ui.Model;

import net.sf.json.JSONObject;

/**
 * request参数进行封装工具类
 ******************************************************************************
 *****************************************************************************
 * @author ywt
 * @date 2016年10月18日 下午5:33:21
 * @version 1.0
 *
 */
public class RequestParamUtil {
	
	private static Pattern humpPattern = Pattern.compile("[A-Z]");  
    /**驼峰转下划线,效率比上面高*/  
	
    public static String humpToLine(String str){  
        Matcher matcher = humpPattern.matcher(str);  
        StringBuffer sb = new StringBuffer();  
        while(matcher.find()){  
            matcher.appendReplacement(sb, "_"+matcher.group(0).toLowerCase());  
        }  
        matcher.appendTail(sb);  
        return sb.toString();  
    }  
	/**
	 * sql特殊字符%_替换
	 * @author ywt
	 * @date 2017年6月23日 下午2:36:42
	 * @version 1.0
	 * @param str
	 * @return
	 */
	private static String specialCharacter(String str){
		if (StringUtils.isBlank(str)) {
			return str;
		}
		String res = str.replaceAll("%", "\\\\%");
		if (res.startsWith("_")) {
			res="\\"+res;
		}
		if(str.length() != 1){
			StringBuffer sb = new StringBuffer(res);
			if (str.endsWith("_")) {
				res=sb.insert(sb.length()-1, "\\").toString();
			}
		}
		return res;
	}
	/**
	 * sql特殊字符%_替换
	 * @author ywt
	 * @date 2017年6月23日 下午5:04:23
	 * @version 1.0
	 * @param str
	 * @return
	 */
	private static String[] specialCharacter(String[] str){
		for (int i = 0; i < str.length; i++) {
			str[i] = specialCharacter(str[i]);
		}
		return str;
	}
	/**
	 * 将request传递的参数封装成map
	 * @author ywt
	 * @date 2016年10月18日 下午5:38:36
	 * @version 1.0
	 * @param request
	 * @return
	 */
	public static Map<String, Object> formMap(HttpServletRequest request) {
		Map<String, Object> map = new HashMap<String, Object>();
		@SuppressWarnings("unchecked")
		Map<String, String[]> tmp = request.getParameterMap();
		if (tmp != null) {
			for (String key : tmp.keySet()) {
				String[] values = tmp.get(key);
				map.put(key, values.length == 1 ? values[0].trim() : values);
			}
		}
		return map;
	}
	/**
	 * 将request传递的参数封装成map,
	 * 去掉是空字符串的参数,
	 * 并且将%与_转换，
	 * 该方法一般只有sql查询时传递参数才用此方法，其他一般不用
	 * @author ywt
	 * @date 2016年10月26日 下午4:53:09
	 * @version 1.0
	 * @param request
	 * @param b
	 * 是否转移sql查询特殊字符
	 * @return
	 */
	public static Map<String, Object> formMapDelEmpty(HttpServletRequest request, boolean b) {
		Map<String, Object> map = new HashMap<String, Object>();
		@SuppressWarnings("unchecked")
		Map<String, String[]> tmp = request.getParameterMap();
		if (tmp != null) {
			for (String key : tmp.keySet()) {
				String[] values = tmp.get(key);
				if(values.length==1&&StringUtils.isNotBlank(values[0])){
					map.put(key, values[0].trim());
				}
			}
		}
		return map;
	}
	/**
	 * 将request传递的参数封装成map,
	 * @author ywt
	 * @date 2016年10月26日 下午4:53:09
	 * @version 1.0
	 * @param request
	 * @return
	 */
	public static Map<String, Object> formMapDelEmpty(HttpServletRequest request) {
		Map<String, Object> map = new HashMap<String, Object>();
		@SuppressWarnings("unchecked")
		Map<String, String[]> tmp = request.getParameterMap();
		if (tmp != null) {
			for (String key : tmp.keySet()) {
		        String[] values = tmp.get(key);
                if(values.length==1 && StringUtils.isNotBlank(values[0])){
                    map.put(key, values[0].trim());
                }
			}
		}
		return map;
	}
	/**
	 * 将request传递的参数封装成JSONObject
	 * @author ywt
	 * @date 2016年11月16日 下午5:42:06
	 * @version 1.0
	 * @param request
	 * @return
	 */
	public static JSONObject formJSONObject(HttpServletRequest request) {
		JSONObject obj = new JSONObject();
		@SuppressWarnings("unchecked")
		Map<String, String[]> tmp = request.getParameterMap();
		if (tmp != null) {
			for (String key : tmp.keySet()) {
				String[] values = tmp.get(key);
				obj.put(key, values.length == 1 ? values[0].trim() : values);
			}
		}
		return obj;
	}
	/**
	 * 将request过来的参数装入model
	 * @author ywt
	 * @date 2016年11月12日 下午5:01:05
	 * @version 1.0
	 * @param request
	 * @param model
	 * @return
	 */
	public static Model formModel(HttpServletRequest request, Model model){
		@SuppressWarnings("unchecked")
		Map<String, String[]> tmp = request.getParameterMap();
		if (tmp != null) {
			for (String key : tmp.keySet()) {
				String[] values = tmp.get(key);
				model.addAttribute(key, values.length == 1 ? values[0].trim() : values);
			}
		}
		return model;
	}
}
